package com.cskaoyan.javase.object._7packaging;
/**
 * 不可变对象
 * 所有数值包装类型以及Boolean（即不包括Void，Void不能实例化）的对象，都具有以下特点：
 * 对象不可变！
 * 首先要理解对象不可变，就要先搞清楚何为不可变对象，Java当中的不可变对象是以下定义的：
 * 某个对象一旦被创建，除非销毁它，否者对象的状态永远不可改变，这种对象就是不可变对象。
 * 但是还要注意不可变对象的状态不可变，是有具体要求的，包括：
 *      1.对象中的基本数据类型成员变量的取值不可变。
 *      2.对象中的引用数据类型成员变量状态不可变：
 *          该引用不能指向新的对象。
 *          该引用指向的对象状态也不可变。
 *
 * @since 21:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        Integer a = 100;
        // 对象不可变不意味着引用不可变,引用是可以指向新对象的
        a = 200;

        // 方法是可以改变对象的状态的,但是不可变对象除外
        String str = "6666";
        test(str);
        System.out.println(str);

        test(a);
        System.out.println(a);
    }

    public static void test(String str){
        // 这里并不是修改了对象的状态,而是让引用的拷贝指向了不同的字符串对象
        str = "hello world";
    }

    public static void test(Integer num){
        num = 777;
    }
}
